package org.dromara.comm_lhz.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.comm_lhz.entity.AsGridMapTableEntity;
import org.dromara.comm_lhz.entity.vo.GridInfoVO;
import org.dromara.comm_lhz.entity.vo.GridVO;
import org.dromara.comm_lhz.mapper.AsGridHMapper;
import org.dromara.comm_lhz.service.AsGridHService;
import org.dromara.common.core.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class AsGridHHServiceImpl extends ServiceImpl<AsGridHMapper, AsGridMapTableEntity> implements AsGridHService {

    @Autowired
    private AsGridHMapper asGridHMapper;

    /**
     * 根据网格名称查询树形结构
     *
     * @param name 网格名称，可能为空
     * @return 网格树形结构列表，如果查询条件为空或无匹配结果，返回空列表
     */
    @Override
    public List<GridVO> findTree(String name) {
        List<GridVO> gridList = null;
        if (!StringUtils.isEmpty(name)) {
            gridList = asGridHMapper.findTreeByName(name);
        } else {
            gridList = asGridHMapper.findTree();
        }
        // 获取原始数据

        // 如果查询结果为空，返回一个空列表
        if (gridList == null) {
            return new ArrayList<>();
        }

        // 存储所有节点
        Map<Long, GridVO> nodeMap = new HashMap<>();
        // 存储最终的树形结构的根节点
        List<GridVO> rootNodes = new ArrayList<>();

        // 初始化节点映射
        for (GridVO item : gridList) {
            nodeMap.put(item.getId(), item); // 将每个节点按 ID 存储到映射中
        }

        // 处理树形结构
        for (GridVO item : gridList) {
            Long parentId = item.getSuperiorGrid();
            if (parentId != null && nodeMap.containsKey(parentId)) {
                GridVO parent = nodeMap.get(parentId);
                parent.getChildren().add(item); // 将子节点添加到父节点的 children 列表中
                item.setParentGridName(parent.getGridName()); // 设置子节点的 parentGridName
            } else {
                // 如果没有父级 ID 或父级 ID 不在节点映射中，则认为这是一个根节点
                rootNodes.add(item);
            }
        }

        return rootNodes;
    }

    /**
     * 根据网格ID选择网格信息
     *
     * @param id 网格ID
     * @return 网格信息列表
     */
    @Override
    public List<GridInfoVO> selGridInfo(Long id) {

        return asGridHMapper.selectGridById(id);
    }


}
